home *** CD-ROM | disk | FTP | other *** search
- {
- The following does not use assembly but it should do what you want,
- and should give you an idea about how its done incase you want to
- translate it to BASM later. It uses the ROM text font information
- for its screen writes.
-
- {***********************************************************************}
- PROGRAM RomFontDemo; { May 08/94, Greg Estabrooks. }
- VAR
- Colors :BYTE;
-
- PROCEDURE SetVidMode( Mode :BYTE ); ASSEMBLER;
- { Routine to set video mode }
- ASM
- Mov AH,00 { Function to set mode }
- Mov AL,Mode { Mode to change to }
- Int $10 { Call dos }
- END;{SetVidMode}
-
- PROCEDURE PutPixel( X,Y :WORD; Color :BYTE );
- BEGIN
- Mem[$A000:(320*Y)+X]:= Color;
- END;
-
- PROCEDURE WriteXY( X,Y :WORD; Color :BYTE; Str :STRING );
- VAR
- OldX :WORD; { Holds Original Column. }
- OldY :WORD;
- StrPos :BYTE; { Character pos in string to write. }
- FontChr:BYTE; { ROM font info. }
- FontPos:BYTE;
- BitPos :BYTE;
- BEGIN
- OldY := Y; { Save Starting Row. }
- FOR StrPos := 1 TO Length(Str) DO
- BEGIN { Loop through every character. }
- OldX := X; { Save Current Column. }
- Y := OldY; { Restore starting row. }
- FOR FontPos := 0 TO 7 DO
- BEGIN { Scroll through all 8 BYTES of font. }
- FontChr := MEM[$FFA6:$E+(ORD(Str[StrPos]) SHL 3) + FontPos];
- FOR BitPos := 7 DOWNTO 0 DO
- BEGIN { Scroll through all 8 BITS of each BYTE.}
- IF (FontChr AND (1 SHL BitPos)) <> 0 THEN
- PutPixel(X,Y,Color); { IF bit is set then draw pixel. }
- INC(X); { point to next column. }
- END;
- INC(Y); { point to next row. }
- X := OldX; { Restore old column for next line. }
- END;
- X := X + 8; { Move 9 columns ahead. }
- END;
- END;{WriteXY}
-
- BEGIN
- SetVidMode($13);
- FOR Colors := 1 TO 19 DO
- WriteXY(Colors*10,Colors*10,Colors,'Greg Estabrooks');
- Readln;
- SetVidMode($03);
- END.
- {***********************************************************************}